package com.example.j280_webproject.day038.service;

import com.example.j280_webproject.day038.jdbc.BaseJDBC;
import com.example.j280_webproject.day038.jdbc.ClassJDBC;
import com.example.j280_webproject.day038.jdbc.StudentJDBC;
import java.sql.Connection;
import java.sql.SQLException;

public class UserService {
    public static void main(String[] args) throws SQLException {
        UserService userService = new UserService();
//        userService.InsertStudentAndClass("谢打","11年级","27");    //学生存在 班级不存在
//        userService.InsertStudentAndClass("谢打","11年级","27");    //学生存在 班级存在
//        userService.InsertStudentAndClass("成立","11年级","28");    //学生不存在 班级存在
        userService.InsertStudentAndClass("成龙","12年级","29");    //学生不存在 班级不存在
    }

    /**
     * 方法实现：
     * 判断学生是否已存在信息表中，如果已存在，检查输入学生和已存在学生是否是本人，如果是本人则继续执行班级插入或修改班级；如果不是本人则不做任何操作，直接退出
     *如果不存在，则需要新插入学生姓名和身份证再执行班级插入或修改班级
     * @param studentName          学生姓名
     * @param className            班级名称
     * @param card                 学生身份证号码
     * @throws SQLException        SQL异常
     */
    public void InsertStudentAndClass(String studentName,String className,String card) throws SQLException {
        Connection connection = BaseJDBC.createConnection();              //创建连接数据库连接池类对象
        StudentJDBC studentJDBC = new StudentJDBC();                      //创建学生信息处理类对象便于调用方法

        String[] strArrays = studentJDBC.selectByCard(connection, card);
        if (strArrays[0]!=null){                                          //如果返回结果不为null则存在这个学生，反之不存在这个学生
            if (!strArrays[0].equals(studentName)){                       //如果学生存在切姓名不相同证明不是同一人则不做任何处理，直接退出
                System.out.println("请输入正确的学生信息！");
                return;
            }
            int student_id = Integer.parseInt(strArrays[1]);              //获取学生的主键
            insertClass(connection,className,student_id,studentJDBC);     //调用班级处理逻辑方法，此方法检查班级是否存在，如果班级存在，则直接更新学生的班级id，如果班级不存在，则先新增班级，再更新学生的班级id
        }
        else {                                                            //学生不存在执行
            studentJDBC.insert(connection,studentName,card );             //插入学生姓名和身份号码
            strArrays = studentJDBC.selectByCard(connection, card);       //通过学生身份号码获取学生姓名和id存入String[]返回数组
            int student_id = Integer.parseInt(strArrays[1]);              //获取学生的主键
            insertClass(connection,className,student_id,studentJDBC);     //调用班级处理逻辑方法，此方法检查班级是否存在，如果班级存在，则直接更新学生的班级id，如果班级不存在，则先新增班级，再更新学生的班级id
        }
        connection.commit();
        connection.close();
    }

    /**
     * 班级处理逻辑方法，此方法检查班级是否存在，如果班级存在，则直接更新学生的班级id，如果班级不存在，则先新增班级，再更新学生的班级id
     *
     * @param connection          数据库连接池
     * @param className           班级名称
     * @param student_id          学生id
     * @param studentJDBC         学生信息表JDBC
     * @throws SQLException       SQL异常
     */
    public void insertClass(Connection connection,String className , int student_id , StudentJDBC studentJDBC) throws SQLException {
        ClassJDBC classJDBC = new ClassJDBC();                            //创建班级表JDBC
        int class_id = classJDBC.selectByclassName(connection, className);//通过班级名称查询获取班级主键id如果班级存在则返回班级id，否者返回为-1
        if(class_id!=-1){                                                 //如果班级存在执行！=-1执行if内语句块
            studentJDBC.updateById(connection, class_id,student_id);      //修改学生表中的班级id
        }
        else {                                                            //班级不存在执行
            classJDBC.insert(connection,className);                       //插入新班级名称
            class_id = classJDBC.selectByclassName(connection, className);//通过插入的新班级名称查询班级id并返回，如果插入成功一定能返回班级id，故不在做判断班级是否存在
            studentJDBC.updateById(connection, class_id,student_id);      //修改学生表中的班级id
        }
    }

}
